package com.designpattern.SingletonPattern;

/**
 * @Author yp
 * @Date 2021-06-04
 * @Description 懒汉式单例类
 **/

public class LazySingleton {
    //为了易于模拟多线程下，懒汉式出现的问题，我们在创建实例的构造函数里面使当前线程暂停了50毫秒
   private LazySingleton(){
       try {
            Thread.sleep(50);
       }catch (InterruptedException err){
        err.printStackTrace();
       }
       System.out.println("生成singleton一次！");
   }
   private static LazySingleton lazySingleton = null;

    /**
     * 全局只有一个 单例对象，所以在new 之前，判断一下全局的那个对象是否为空
     * @return
     */
   public static LazySingleton getLazySingleton(){
       if (lazySingleton == null) {
           lazySingleton = new LazySingleton();
       }
       return lazySingleton;
   }

    /**
     *  我们在测试代码里面 新建了10个线程，让这10个线程同时调用LazySingleton.getLazyInstance()方法
     * @param args
     */
    public static void main(String[] args) {
        for (int i = 0;i < 10; i++){
            new Thread(){
                @Override
                public void run() {
                    LazySingleton.getLazySingleton();
                }
            }.start();
        }
    }

/**
 * out: 结果输出了10次  生成singleton一次！
 * 详细信息见markdown
 */
}
